using MESData.ErrorCode;
using MESData.ProductionPlan.API.DTO;

namespace MESData.ProductionPlan.API.Services
{
    /// <summary>
    /// 生产计划服务接口
    /// </summary>
    public interface IProductionPlanService
    {
        /// <summary>
        /// 新增生产计划
        /// </summary>
        /// <param name="dto">生产计划DTO</param>
        /// <param name="operatorName">操作人</param>
        /// <returns></returns>
        Task<ApiResult<bool>> CreateProductionPlanAsync(ProductionPlanDto dto, string operatorName);

        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="file">文件</param>
        /// <param name="productionPlanId">生产计划ID</param>
        /// <param name="operatorName">操作人</param>
        /// <returns></returns>
        Task<ApiResult<string>> UploadFileAsync(IFormFile file, int productionPlanId, string operatorName);

        // 1. 逻辑删除
        Task<ApiResult<bool>> SoftDeleteAsync(int productionPlanId, string operatorName);

        // 2. 导出生产计划（返回文件路径）
        Task<ApiResult<byte[]>> ExportPlanAsync(int productionPlanId);

        // 3. 详情
        Task<ApiResult<ProductionPlanDetailDto>> GetDetailAsync(int productionPlanId);

        // 4. 导出生产物品
        Task<ApiResult<byte[]>> ExportProductedItemsAsync(int productionPlanId);

        // 5. 导出操作记录
        Task<ApiResult<byte[]>> ExportOperationLogsAsync(int productionPlanId);

        /// <summary>
        /// 分页查询生产计划
        /// </summary>
        /// <param name="queryDto">查询参数</param>
        /// <returns></returns>
        Task<ApiResult<ProductionPlanPageResultDto>> GetProductionPlansPageAsync(ProductionPlanQueryDto queryDto);

        /// <summary>
        /// 导出生产计划列表（支持分页查询条件）
        /// </summary>
        /// <param name="queryDto">查询参数</param>
        /// <returns></returns>
        Task<ApiResult<byte[]>> ExportProductionPlansAsync(ProductionPlanQueryDto queryDto);
    }
} 